/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package bomberman.pl.divano.interfejs;

import bomberman.pl.divano.gra.Aktor;
import bomberman.pl.divano.gra.Gra;
import bomberman.pl.divano.gra.Plansza;
import bomberman.pl.divano.gra.STAŁE;
import bomberman.pl.divano.klient.KlientNadawca;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferStrategy;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

/**
 *
 * @author divano
 */
public class Okno extends Canvas implements STAŁE, MouseListener, KeyListener {

    Gra bombreman;
    KlientNadawca nadawca;
    public BufferStrategy strategia;
    cZasoby obrazki;
	private boolean koniecGry;

    public Okno(Gra arg, KlientNadawca nada) {
        nadawca = nada;
        obrazki = new cZasoby();
		koniecGry=false;

        bombreman = arg;
        //kontenerObrazków = new SpriteCache();
        JFrame okno = new JFrame("Bomberman Rafał -109264 Andrzej-109301 v0.1");
        okno.setSize(STAŁE.SZEROKOSC, STAŁE.WYSOKOSC);
        okno.setVisible(true);
        JPanel panel = (JPanel) okno.getContentPane();
        panel.setBounds(0, 0, STAŁE.SZEROKOSC, STAŁE.WYSOKOSC);
        panel.setPreferredSize(new Dimension(STAŁE.SZEROKOSC, STAŁE.WYSOKOSC));
        //panel.setLayout(null);
        panel.add(this);
        panel.setVisible(true);
        okno.setBounds(0, 0, STAŁE.SZEROKOSC, STAŁE.WYSOKOSC);
        okno.setResizable(false);
        this.addMouseListener(this);
        this.addKeyListener(this);
        okno.addWindowListener(new WindowAdapter() {

            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });

        createBufferStrategy(2);
        strategia = getBufferStrategy();
        if (strategia == null) {
            System.out.println("Brak bufora");
        }
        repaint();
        requestFocus();
    //kontenerObrazków = new SpriteCache();
    }
    ;

    @Override
    public void paint(Graphics g) {
        rysuj();
    }

    public void rysuj() {
        Graphics2D w = (Graphics2D)strategia.getDrawGraphics();
        
        Vector<Aktor> a = bombreman.getAktorzy();

        Plansza aktualnaPlansza = bombreman.getPlansza();
        bomberman.pl.divano.gra.Element nowyElement = null;
       
        for(int x=0; x<STAŁE.POLEX; x++) {
            for(int y=0; y<STAŁE.POLEY; y++) {
                for(int z=STAŁE.WARSTWY-1; z>=0; z--) {
                    nowyElement = aktualnaPlansza.getElement(x, y, z);
                    //System.out.println("fuck it: "+nowyElement.toInt()+"  "+stałaPustePole);
                    if( nowyElement.toInt() != 1) {
                        int numerek = nowyElement.toInt();
                        w.drawImage(obrazki.getZasob(numerek), x* STAŁE.WIELKOSC_OBRAZKA, y* STAŁE.WIELKOSC_OBRAZKA, STAŁE.WIELKOSC_OBRAZKA, STAŁE.WIELKOSC_OBRAZKA, this);
                        break;
                    } else if(z == 0) {
                        w.drawImage(obrazki.getZasob(1), x* STAŁE.WIELKOSC_OBRAZKA, y* STAŁE.WIELKOSC_OBRAZKA, STAŁE.WIELKOSC_OBRAZKA, STAŁE.WIELKOSC_OBRAZKA, this);
                    }
                }
            }
        }
        // w.setColor(Color.BLUE);

        // w.fillRect(0, 0, STAŁE.SZEROKOSC, STAŁE.WYSOKOSC);
        //w.setColor(Color.BLACK);
        //w.drawImage(obrazki.getZasob(KATEGORIA_OGIEN), 1*20, 2*20, 20, 20, this);

        for (int i = 0; i < a.size(); i++) {
            w.setColor(new Color(a.get(i).getKolor()));
            w.fillRect(a.get(i).getPozX() *  STAŁE.WIELKOSC_OBRAZKA, a.get(i).getPozY() *  STAŁE.WIELKOSC_OBRAZKA,  STAŁE.WIELKOSC_OBRAZKA,  STAŁE.WIELKOSC_OBRAZKA);
            w.fillRect(460, STAŁE.WIELKOSC_OBRAZKA*(i+1)*2, STAŁE.WIELKOSC_OBRAZKA, STAŁE.WIELKOSC_OBRAZKA);
            if(a.get(i).isCzyZabity()){
                w.setColor(Color.RED);
                w.fillOval(a.get(i).getPozX() *  STAŁE.WIELKOSC_OBRAZKA, a.get(i).getPozY() *  STAŁE.WIELKOSC_OBRAZKA,  STAŁE.WIELKOSC_OBRAZKA,  STAŁE.WIELKOSC_OBRAZKA);
            }else{
                w.setColor(Color.BLACK);
            }
            w.drawString("Gracz "+i,460+STAŁE.WIELKOSC_OBRAZKA, STAŁE.WIELKOSC_OBRAZKA*(i+1)*2+STAŁE.WIELKOSC_OBRAZKA-10);
        }
        strategia.show();
		if (!this.koniecGry && bombreman.isKoniecGry()) {
			JOptionPane.showConfirmDialog(this, "Gra się skończyła.");
			this.koniecGry=true;
		}
    }

   /* @Override
    public void update(Graphics g) {
        paint(g);
        requestFocus();
    }
*/
    @Override
    public void mouseClicked(MouseEvent e) {
        //nadawca.wykonajRuch(1);
        //System.out.println("Biegam sobie");
    //repaint();
    // throw new UnsupportedOperationException("Not supported yet.");
    }

    public void mousePressed(MouseEvent e) {
        // throw new UnsupportedOperationException("Not supported yet.");
    }

    public void mouseReleased(MouseEvent e) {
        // throw new UnsupportedOperationException("Not supported yet.");
    }

    public void mouseEntered(MouseEvent e) {
        // throw new UnsupportedOperationException("Not supported yet.");
    }

    public void mouseExited(MouseEvent e) {
        //  throw new UnsupportedOperationException("Not supported yet.");
    }

    public void keyTyped(KeyEvent e) {
        /*if (e.getKeyCode() == KeyEvent.VK_UP) {
            nadawca.wykonajRuch(0);
            System.out.println("Biegam sobie");
        } else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
            nadawca.wykonajRuch(1);
            System.out.println("Biegam sobie");
        } else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
            nadawca.wykonajRuch(2);
            System.out.println("Biegam sobie");
        } else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
            nadawca.wykonajRuch(3);
            System.out.println("Biegam sobie");
        }
        ;*/
    // throw new UnsupportedOperationException("Not supported yet.");
    }

    public void keyPressed(KeyEvent e) {
        switch(e.getKeyCode()){
            case KeyEvent.VK_UP : nadawca.wykonajRuch(0);
            break;
            case KeyEvent.VK_RIGHT : nadawca.wykonajRuch(1);
            break;
            case KeyEvent.VK_DOWN : nadawca.wykonajRuch(2);
            break;
            case KeyEvent.VK_LEFT : nadawca.wykonajRuch(3);
            break;
            case KeyEvent.VK_SPACE : nadawca.postawBombe();
            break;
        }
        //  throw new UnsupportedOperationException("Not supported yet.");
    }

    public void keyReleased(KeyEvent e) {
        switch(e.getKeyCode()){
            case KeyEvent.VK_UP : nadawca.nieRuch(0);
            break;
            case KeyEvent.VK_RIGHT : nadawca.nieRuch(1);
            break;
            case KeyEvent.VK_DOWN : nadawca.nieRuch(2);
            break;
            case KeyEvent.VK_LEFT : nadawca.nieRuch(3);
            break;
            /*case KeyEvent.VK_SPACE : nadawca.postawBombe();
            break;*/
        }
        // throw new UnsupportedOperationException("Not supported yet.");
    }
}
